<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 只能算是通过createObj这个工厂创建出的对象的公共功能
  // function fn(){
  //   console.log("hello 我叫：" + this.name);
  // }
  
  // 工厂模式的原理

  // 构造函数内，用来定义将来对象的属性
  function createObj(n, a, s){
    const obj = {};
    obj.name = n;
    obj.age = a;
    obj.sex = s;
    // 将公共空间内的方法绑定到对象
    obj.sayHello = createObj.lyObj.sayHello;
    obj.call = createObj.lyObj.call;
    return obj;
  }
  // 将来对象的公共方法空间
  createObj.lyObj = {};
  // 将来对象的公共方法
  createObj.lyObj.sayHello = function(){
    console.log("hello 我叫：" + this.name);
  }
  // 将来对象的公共方法
  createObj.lyObj.call = function(){
    console.log(this.name + "打电话");
  }

  // console.log( createObj.fn )

  const o1 = createObj("李四", 20, "女");
  console.log(o1)
  // 打印自己的名字
  o1.sayHello()
  o1.call()
  
  const o2 = createObj("张三", 18, "男");
  console.log(o2)
  // 打印自己的名字
  o2.sayHello()
  o2.call()

  console.log( o1.sayHello === o2.sayHello );
  console.log( o1.call === o2.call );
</script>
</html>